Skip to content

feat(bundles): create lfx-bundles metapackage skeleton#13564

Merged
erichare merged 8 commits into
bundles/foundation-discoveryfrom
bundles/create-lfx-bundles
Jun 11, 2026
Merged

feat(bundles): create lfx-bundles metapackage skeleton#13564
erichare merged 8 commits into
bundles/foundation-discoveryfrom
bundles/create-lfx-bundles

Conversation

@erichare

@erichare erichare commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Bundle Separation Phase A — PR 2: lfx-bundles skeleton

Part of Bundle Separation Phase A — metapackage split (1.11). Stacked on the foundation PR (bundles/foundation-discovery).

What this does

Creates the manifest-less lfx-bundles distribution that the long-tail providers will move into. Empty skeleton for now — the bulk move (scripts/migrate/consolidate_bundles.py, a later PR) populates the provider folders + per-provider extras.

  • src/bundles/lfx-bundles/: a single pyproject.toml declaring the lfx.bundles entry-point (lfx_bundles = "lfx_bundles"), an lfx>=1.11.0.dev0,<2.0.0 pin (the pre-release-safe floor sync_bundle_lfx_pin.py generates for the 1.11 line), and a generated (currently empty) all extra; a bare lfx_bundles/__init__.py namespace package; and a README documenting the model + install stories.
  • Wired into the root workspace via the existing bundle marker blocks: dep lfx-bundles[all]>=1.0,<2.0, uv source, member.
  • Hyphen dir name (lfx-bundles) so release.yml's src/bundles/*/pyproject.toml glob builds it with zero workflow change.
  • Removes the orphaned scripts/ci/update_bundle_versions.py (and drops the tests this PR had added for it): the nightly bundle-rename track it served was retired by the canonical pre-release cutover (see src/bundles/NIGHTLY.md) and nothing invokes the script on main or any release branch. Stale doc references in sync_bundle_lfx_pin.py / test_bundle_lfx_pin.py updated accordingly.

Test plan

  • uv sync resolves + installs lfx-bundles==1.0.0
  • Wheel builds; entry_points.txt carries the lfx.bundles group
  • load_lfx_bundles_extensions() (foundation PR) discovers the entry point and the empty skeleton registers zero providers with no error

Stack (merge bottom-up)

  1. bundles/foundation-discoveryfeat/bundle-metapackage-split (foundation)
  2. bundles/create-lfx-bundlesbundles/foundation-discovery ← this PR
  3. bundles/lfx-engine-onlybundles/create-lfx-bundles (engine-only)

Base is the foundation branch so this PR's diff is only the skeleton. GitHub auto-retargets to feat/bundle-metapackage-split once PR 1 merges.

Creates the manifest-less lfx-bundles distribution (the langchain-community
model) that the long-tail providers will move into. Empty skeleton for now;
the bulk move (scripts/migrate/consolidate_bundles.py) populates the provider
folders + per-provider extras later.

- src/bundles/lfx-bundles: a single pyproject declaring the lfx.bundles
  entry-point (lfx_bundles = "lfx_bundles"), an lfx>=1.10.0,<2.0.0 pin, and a
  generated (currently empty) `all` extra; plus a bare lfx_bundles namespace
  package and a README documenting the model + install stories
- wired into the root workspace via the existing bundle marker blocks:
  dep lfx-bundles[all]>=1.0,<2.0, uv source, and member
- hyphen dir name so release.yml's src/bundles/*/pyproject.toml glob builds
  it with zero workflow change

Verified: the wheel builds (entry_points.txt carries the lfx.bundles group);
load_lfx_bundles_extensions (PR-1) discovers the entry point and the empty
skeleton registers zero providers with no error.
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

🗂️ Base branches to auto review (1)
  • release-.*

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: dc80240d-ce0e-4a2c-b51a-d97dca2b1a4e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch bundles/create-lfx-bundles

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jun 9, 2026
erichare added 2 commits June 10, 2026 11:11
Two gaps in update_bundle_versions.py around extras suffixes, both fatal
or silently wrong for the first nightly carrying the lfx-bundles
metapackage:

- update_root_pyproject_for_bundle's dep regex required the version
  specifier immediately after the name, so "lfx-bundles[all]>=1.0,<2.0"
  (a MAIN dep) was left unrewritten while the workspace member was
  renamed to lfx-bundles-nightly; uv lock then tries to resolve stable
  lfx-bundles from PyPI, where it does not exist. The same gap silently
  left "lfx-docling[local]>=0.1.0" optional-dep refs pointing at the
  stable distribution. The regex now tolerates an [extras] group and
  carries it into the replacement.

- rename_bundle_pyproject skipped self-referencing extras, so the
  metapackage's generated `all` extra kept 45 "lfx-bundles[<provider>]"
  members after the rename, pulling the stable distribution (same
  lfx_bundles import package, install collision) once published. Self
  refs now follow the rename, idempotently.

Tests drive the real script module, mirroring test_bundle_lfx_pin.py.
This closes the PR-2 audit item flagged when the metapackage was
introduced. The canonical-pre-release cutover would retire the nightly
rename entirely; until it lands, the rename must be correct.
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jun 10, 2026
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jun 10, 2026
@erichare erichare marked this pull request as ready for review June 10, 2026 21:08
@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

✅ Test Coverage Advisor

No source changes detected without accompanying tests. Thanks for keeping coverage up! 🎉

Advisory check only — never blocks merge.

@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jun 10, 2026
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jun 10, 2026
@codecov

codecov Bot commented Jun 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 49.17%. Comparing base (883789c) to head (e887249).
⚠️ Report is 4 commits behind head on bundles/foundation-discovery.

Additional details and impacted files

Impacted file tree graph

@@                       Coverage Diff                        @@
##           bundles/foundation-discovery   #13564      +/-   ##
================================================================
- Coverage                         58.38%   49.17%   -9.21%     
================================================================
  Files                              2304     2160     -144     
  Lines                            220032   206714   -13318     
  Branches                          34163    13109   -21054     
================================================================
- Hits                             128456   101649   -26807     
- Misses                            90121   103609   +13488     
- Partials                           1455     1456       +1     
Flag Coverage Δ
backend 65.14% <ø> (+0.07%) ⬆️
frontend 43.28% <ø> (-14.39%) ⬇️
lfx 54.43% <ø> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 1157 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Frontend Unit Test Coverage Report

Coverage Summary

Lines Statements Branches Functions
Coverage: 43%
43.28% (57621/133123) 69.22% (7829/11310) 41.49% (1291/3111)

Unit Test Results

Tests Skipped Failures Errors Time
4940 0 💤 0 ❌ 0 🔥 16m 22s ⏱️

@ogabrielluiz ogabrielluiz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @erichare,

Notes are inline.

Comment thread scripts/ci/update_bundle_versions.py Outdated
# would resolve the stable distribution from PyPI -- which ships the same
# import package and collides at install time -- or fail to resolve
# entirely while the stable name is unpublished. Idempotent on re-runs.
self_ref_pattern = re.compile(rf'"{re.escape(base_name)}(?:-nightly)?(\[[^\]]*\])')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this script still have a caller? #13206 dropped the update_bundle_versions.py invocation from nightly_build.yml, NIGHTLY.md says bundles keep their stable names during nightly bumps, and grep finds no workflow or Makefile target invoking it now. The new test file's docstring also says "The nightly build calls this script", which isn't true anymore. If the rename track is coming back for the metapackage this needs the workflow wiring, otherwise I think the script and the new tests should go rather than grow.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — confirmed: no workflow or Makefile target on main or any release branch invokes it (the only remaining hits were doc comments). The rename track isn't coming back (Approach A / NIGHTLY.md retired it), so I deleted the script and the new tests in e887249, and updated the stale references in sync_bundle_lfx_pin.py / test_bundle_lfx_pin.py that pointed at it.

Comment thread src/bundles/lfx-bundles/README.md Outdated
```bash
pip install langflow # everything (langflow pins lfx-bundles[all])
pip install lfx # engine only, no bundles
pip install "lfx[bundles]" # engine + this metapackage (deployment footnote)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Neither of these commands works yet: lfx has no bundles extra (no optional-dependencies table at all), and the only extra here is the empty all, so lfx-bundles[tavily] installs with a no-such-extra warning and none of the provider deps (I tried it with uv pip install --dry-run). Since this README ships as the PyPI page, could you mark these as the post-bulk-move state or drop them until then?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right — fixed in e887249. The install section now separates what works today (pip install langflow, bare lfx) from what arrives later (lfx[bundles] ships with the engine-only split in PR 3; per-provider extras land with the bulk move), and notes the generated all extra is empty until the first provider tranche moves in.

# depends on (``lfx-bundles[all]``) so ``pip install langflow`` stays
# functionally identical to today.
dependencies = [
"lfx>=1.11.0.dev0,<2.0.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR body says this declares an lfx>=1.10.0,<2.0.0 pin, but the code has >=1.11.0.dev0, which I think is the right one (it's what sync_bundle_lfx_pin.py generates for lfx 1.11.0). Could you update the body?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the PR body — it now states the actual lfx>=1.11.0.dev0,<2.0.0 pin (the pre-release-safe floor sync_bundle_lfx_pin.py generates for the 1.11 line) and also mentions the update_bundle_versions.py removal from the other thread.

…ript, fix README install stories

- Delete scripts/ci/update_bundle_versions.py and its tests: the nightly
  bundle-rename track it served was retired by the canonical pre-release
  cutover (src/bundles/NIGHTLY.md) and no workflow or Makefile target on
  main or any release branch invokes it. Stale doc references in
  sync_bundle_lfx_pin.py and test_bundle_lfx_pin.py updated to match.
- README: split the install section into what works today (langflow, bare
  lfx) vs what arrives with the bulk move / engine-only split
  (lfx[bundles], per-provider lfx-bundles[<provider>] extras), and note
  the generated all extra is empty until the first provider tranche lands.
@github-actions github-actions Bot removed the enhancement New feature or request label Jun 11, 2026
@github-actions github-actions Bot added enhancement New feature or request and removed enhancement New feature or request labels Jun 11, 2026
@erichare erichare requested a review from ogabrielluiz June 11, 2026 14:59
@erichare erichare merged commit 7cd1673 into bundles/foundation-discovery Jun 11, 2026
50 checks passed
@erichare erichare deleted the bundles/create-lfx-bundles branch June 11, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants